Пакет Maple – интерактивная программа, позволяющая проводить аналитические выкладки и вычисления, снабженная средствами двумерной и трехмерной графики, имеющая мощный язык программирования и богатую библиотеку математических формул и сведений. Работа с Maple заключается в том, что пользователь вводит математические выражения и инструкции (команды), а система пытается их выполнить и представить ответ. Получив (или не получив) ответ, пользователь вводит новые инструкции и так далее – взаимодействие с пакетом происходит в диалоговом режиме. Благодаря собственному языку программирования высокого уровня, введенные выражения и инструкции, а также результаты выполнения команд – формулы, графики, таблицы и числа – запоминаются в едином документе, и итоговый документ становится (быть может, с минимальными дополнениями) научной статьей, разделом в учебнике, отчетом.
Графический
интерфейс Maple аналогичен имеющемуся в системах редактирования и подготовки
текста и использует обычные средства работы с файлами и редактирования (мышь и
клавиатура). После запуска выполняемого модуля wmaple или xmaple в среде Unix
появляется оболочка с новым документом (worksheet)
Работа
в Maple проходит в режиме сессии (session) – пользователь вводит команды,
математические выражения, процедуры, которые воспринимаются и интерпретируются
Maple. Каждая команда должна завершаться точкой с запятой (;) или двоеточием
(:). В первом случае в строке под предложением будет выведен результат
исполнения команды или сообщение об ошибке, во втором случае результат не
выводится. Для отмены всех сделанных назначений и начала нового сеанса без
выхода из Maple используется команда restart.
Кроме того, в Maple можно вводить таблицы и текстовые параграфы, структурировать текст и документ, добавлять гиперссылки, объединяющие несколько документов в подобие электронной книги. В документ также можно вставлять объекты (рисунки и таблицы) из других программ, используя интерфейс OLE2.
Отметим, что различные документы, открытые в одном сеансе, используют общую область памяти, и значение, присвоенное переменной в одном документе, сохраняется при переходе к другому документу.
Результаты работы могут быть сохранены в файлах различных форматов. Текущий документ (области ввода и вывода, комментарии, текст, графика) записываются в файл с расширением .mws. При записи в файлы с другими расширениями сохраняются только области ввода и тексты комментариев. Кроме того, весь документ или его часть могут быть сохранены в форматах, допускающих их использование в других программах.
Пакет Maple постоянно развивается, приобретая новые команды и, соответственно, возможности для проведения математических выкладок, вычислений, графического отображения информации. При этом происходят изменения в синтаксисе и оболочке. Для сохранения преемственности с документами, подготовленными в старых версиях, фирма снабжает свой продукт специальными конверторами, при загрузке файла устаревшей версии Maple предлагает преобразовать нотацию файла согласно новым правилам.
Набор и исполнение команд производится по группам (Execution Group). Каждая группа состоит из нескольких частей: область ввода (Input Region) с командами, область вывода (Output Region) с результатами выполнения и тексты комментариев (Text Region). Область вывода может включать результаты выполнения математических и алгоритмических операций, а также графические образы (двумерная и трехмерная графика). Группы выделяются слева квадратными скобками и разделяются сепараторами (Separator), которые по умолчанию невидимы, но могут быть сделаны видимыми. Для структурирования документа используются параграфы.
Системы аналитических вычислений оперируют с множеством объектов, используя для работы различные типы данных. Это позволяет применять свои правила обработки для каждого типа. Простейшими объектами в Maple являются числа, константы, строки и имена. Под числами будем понимать собственно целые и вещественные числа, а также рациональные дроби и радикалы (корни из чисел). Приведём примеры чисел:
> 1.23, 4e5, I+Pi, sqrt(8);
Использование рациональных чисел, радикалов и констант (число p, мнимая единица) позволяет проводить абсолютно точные вычисления, так как при выполнении операций не возникает погрешности округления. Сразу отметим, что эти операции производятся гораздо медленнее.
Каждая введенная команда должна завершаться разделителем: точкой с запятой (;) или двоеточием (:). Если ввод предложения завершается точкой с запятой, то в строке под предложением сразу будет отклик: результат исполнения команды или сообщение об ошибке. Разделитель (:) используется для отмены вывода, когда команда выполняется системой, но ее результат не выводится на экран. В Maple применяются круглые, квадратные и фигурные скобки. Назначение круглых скобок – задавать порядок при построении математических выражений и обрамлять аргументы функций и параметры в записи команд. Квадратные скобки нужны для работы с индексными величинами. Фигурные скобки используются для формирования множеств. В Maple две последовательные точки в параметрах команд применяются для определения интервала изменения переменных.
Теперь расскажем о других важных символах, используемых в Maple. Знаком процента (%) обозначается предшествующий вывод. Два знака процента отсылают к предпоследнему результату. Наконец, предшественник предпоследнего результата обозначается тремя знаками процента. Эта нотация может быть удобна при последовательной работе с документом, но чревата неприятностями при свободном перемещении по тексту, когда команды выполняются в произвольном порядке.
Используя константы, переменные, знаки арифметических и других операций, составляются выражения. Это основной объект для многих команд. Последовательность выполнения арифметических операций соответствует стандартным математическим правилам: сначала проводится возведение в степень (^), затем умножение (*) и деление (/), а в конце – сложение (+) и вычитание (-). Операции выполняются слева направо, для изменения порядка используются круглые скобки. Для операций отношения имеются знаки >, <, >=, <=, <>, =, а для конструирования булевых выражений используются также команды not, or, and. Обратный слеш (\) используется для переносов, а для комментирования в Maple предусмотрен символ #. Вся строка после этого символа не выполняется. Приведем примеры выражений:
> x+y^z-12<0;
3.14159\26535\89793\23846; #число пи
В Maple представлены все математические константы. В табл. 1.2 представлены важнейшие из них. Напомним, что число p даётся при помощи Pi, а pi означает греческую букву p.
Таблица 1.2. Математические константы.
|
Имя |
Описание |
|
Pi |
Число p |
|
E |
Основание натурального логарифма (число e) |
|
I |
Мнимая единица (квадратный корень из –1) |
|
Infinity |
Бесконечность |
|
gamma |
Константа Эйлера |
|
true, false |
Булевы константы (истина, ложь) |
Имена этих констант являются зарезервированными, а их значения не могут быть переопределены в отличие от ряда переменных среды (управляющих констант).
Переменная Maple идентифицируется именем – набором символов, начинающимся с буквы, причем большие и малые буквы различаются. Кроме букв могут употребляться цифры и знак подчеркивания. Приведем примеры различных имен: Old, old, o_1d
Длина имени зависит от платформы, и на 32-битных машинах допустимы имена из пятисот тысяч символов, а для 64-битных машин можно составлять имена длиной более миллиарда знаков (см. справку). Составные имена могут быть сформированы при помощи оператора конкатенации (||) или команды cat. В качестве имен переменных запрещено использовать термины языка Maple: and, break, by, catch, description, do, done, elif, else, end, error, export, fi, finally, for, from, global, if, in, intersect, local, minus, mod, module, next, not, od, option, options, or, proc, quit, read, return, save, stop, then, to, try, union, use, while. Кроме того, не рекомендуется использовать имена всех команд Maple в качестве имен.
Для обозначения служебных констант используются имена, начинающиеся с подчеркивания. Неопределенные константы, возникающие при решении дифференциального уравнения, именуются _С1, _С2 и т. д. Произвольное целое число обозначается как _N1, _N2, и т.д., а комплексная величина соответственно как _Z1, _Z2 и т.д. Если последним символом имени идет тильда (~), то это имя переменной, относительно которой сделаны назначения (определена вещественность или положительность и т. д., см. подробнее команду assume).
Для присвоения значений переменной используется знак :=. Для просмотра содержимого переменной простого типа нужно лишь ввести имя переменной (для массивов и других составных типов используется команда eval). Напомним, что команда restart используется для отмены всех сделанных назначений в сеансе. Чтобы освободить конкретную переменную от предшествующих назначений, нужно этой переменной присвоить ее имя, заключенное в прямые одинарные кавычки (') (апострофы). Например:
> ex:=x^2+exp(y): ex;
> ex:='ex': ex;
Для защиты от изменений существует команда protect, а для снятия защиты – unprotect. В частности, защищенными являются многие константы Maple. Приведем пример использования последних двух команд. Сначала переменной присвоим значение, а затем ее защитим:
> a:=2: protect('a'): a;
Теперь попытаемся присвоить ей иное значение. Результатом будет сообщение об ошибке:
>
a:=3;
Error, attempting to
assign to `a` which is protected
Следующей командой снимем защиту с переменной, а затем присвоим ей новое
значение:
>
unprotect('a'): a:=3: a;
Важными переменными среды являются Digits и Order, определяющие соответственно число знаков мантиссы для операций с плавающей точкой (по умолчанию десять цифр) и порядка разложений (по умолчанию разложения выписываются члены до шестого порядка). Для переопределения любой из этих величин достаточно просто присвоить ей новое значение. Приведем примеры, иллюстрирующие потерю точности при вычислениях с недостаточным числом значащих цифр и вычисление экспоненты:
> Digits:=1: sqrt(2.0)+0.01-71/50;
> Digits:=4: sqrt(2.0)+0.01-71/50;
> Digits:=20: exp(1.0);
Операции с вещественными числами проводятся по умолчанию с десятью значащими цифрами, но, переопределив Digits, можно работать с любой мантиссой. Этот способ может оказаться полезным и для определенных этапов символьных вычислений, поскольку операции с рациональными числами выполняются медленнее. Имеется также ряд других переменных среды. Так, переменная среды UseHardwareFloats определяет использование арифметического процессора компьютера для операций с вещественными числами, на котором вы работаете. Если эта переменная имеет значение true, то используется непосредственно процессор, а в случае false арифметические операции проделываются Maple программно. По умолчанию этой переменной присвоено значение true. В настоящее время этот режим действует для команд пакета LinearAlgebra и обслуживает операции с массивами, матрицами и векторами, которые основаны на новом классе rtable. Co временем, по утверждению разработчиков, переменная UseHardwarefloats будет определять режим вычислений для всех операций арифметики с плавающей точкой. Перечень переменных среды может быть выведен по команде
Ø anames(environment);
Строкой (string) является любой набор символов, заключенный в двойные кавычки. Например:
> "Maple string:"";'o ?../'(}[]'-!G#tt*4*()_+";
Символ воспринимается Maple как единое целое, а строка состоит из символов, и с каждым из них можно работать отдельно. Например:
> v1:="String"; v2:=`Symbol`;
> v1[2]; v2[2];
Предупредим об опасности
произвольного назначения имен переменных. Если имя переменной совпадает с
именем какой-нибудь команды, то такая команда становится недоступной в текущем
сеансе. Например:
> dchange:=2;
> with(PDEtiils.dchange):
Error, with expects
its 1st argument, package, to be of type {table, procedure, module, name}, but
received 2*PDEtiils
Поэтому перед введением новой переменной name полезно удостовериться, что имя не занято, командой ?name. Появление окошка справки будет означать существование команды с именем name. При работе с Maple следует анализировать результат выполнения команды. Будучи гибкой системой, Maple старается выполнить любую введенную команду. Синтаксические ошибки выделяются программой и достаточно заметны. Описки не так бросаются в глаза. Если неправильно введено имя команды или не загружена библиотека, то Maple просто повторяет набранное в строке ввода без выполнения. Вообще, нужно постоянно проверять введенное и результат, иначе могут возникать «непонятные» ошибки. Например, если в строке ввода опустить знак умножения перед круглой скобкой в выражении x*(y-z), то Maple посчитает, что y-z является аргументом некоторой функции x(y-z). Сказанное иллюстрирует пример дифференцирования двух этих функций по переменной у:
> diff(x*(y-z),y);
> diff(x(y-z),y);
Другая часто встречающаяся ошибка связана с тем, что Maple различает большие и маленькие буквы. Например, если имя числа p написать с маленькой буквы, то пользователь не заметит видимых изменений при представлении результата команд, но многие команды будут работать неверно. Пример:
> sin(pi);
> sin(Pi);
Как уже отмечалось выше, прямые одинарные кавычки (апострофы) используются для того, чтобы освободить переменную от предшествующих значений. Кроме того, прямые кавычки полезны для предупреждения ошибки в том случае, когда для выполнения команды используется переменная, получившая значение ранее. Выполним последовательно команду присваивания и команду вычисления суммы, использовав в качестве индекса определённую ранее переменную:
> i:=3;
>
sum(i^2,i=1..6);
Error, (in sum) summation variable previously assigned, second argument evaluates to 3 = 1 .. 6
В результате появилось сообщение об ошибке, поскольку второй аргумент в команде суммирования sum воспринят как 3=1..6. Применение кавычек даст правильный результат:
> sum('i'^2,'i'=1..6);
В Maple существует множество типов переменных: от известных вещественного (float), целого (integer) и строкового (string) до тех, которые необходимы для выполнения и программирования аналитических преобразований: дробь (fraction), функция (function), индексная переменная (indexed), процедура (procedure), множество (set), разложение (series), последовательность выражений (exprseq), массив (array), списки (переменные типа list, listlist, listlistlist) и некоторые другие. Списки используются для хранения коэффициентов полиномов, множества удобны при формировании системы уравнений и решений уравнений, массивы позволяют хранить и использовать упорядоченную информацию и т. д.
По умолчанию переменная
считается скалярной и имеет тип string. Это фактически математическая
переменная, как x в формуле f(x). Для задания переменных других типов требуется
явное их определение: при помощи оператора присваивания или команд,
преобразующих тип. Информацию о типе той или иной переменной можно получить при
помощи команды whattype, а проверить принадлежность переменной VAR типу ТYРE
помогает команда type (VAR,TYPE); Рассмотрим базовые типы: последовательности
выражений, списки, множества, массивы и таблицы. Попутно представим ряд команд
для работы с данными этих типов.
Переменная типа exprseq получается как последовательность выражений Maple, разделённых запятыми. Например:
> ex:=2,3,x^2,'abc',2;
Последовательность выражений в квадратных скобках образует переменную типа list (список):
>
ex:=2,3,x^2,'abc',2: lex=[ex];
Тот же
список получится по команде list(ex). Обращение к элементам типа list аналогично
для последовательностей exprseq: в квадратных скобках указывается номер или
диапазон номеров
Заключив последовательность выражений в фигурные скобки, получим переменную типа set (множество). Именно в виде множеств удобно задавать системы уравнений и получать найденные Maple решения уравнений:
>
ex:=2,3,x^2,'abc',2: s:={ex};
Массивы или объекты типа array позволяют организовывать данные, используя для индексации отрицательные числа и нуль. Массив создается по команде array(FUN,DIA,LST). Параметры ее имеют следующее назначение: функция FUN задает свойства массива, переменная DIA определяет диапазоны изменения индексов, a LST есть список элементов массива. Каждый из параметров может быть опущен, но по крайней мере один диапазон или список элементов должны быть заданы. В качестве имени FUN могут быть использованы следующие стандартные методы: symmetric, antisymmetric, sparse, diagonal, identity, package. Это позволяет определись соответственно массивы симметричные и антисимметричные (кососимметричные), разреженные (нули для неупомянутых элементов), массивы с ненулевой диагональю и единичные. Имя package указывает на процедуру, служащую для ввода элементов. Например, для создания массива из четырех элементов с именем А используется следующая конструкция:
> A:=array(-1..2);
Сама переменная А при этом считается строковой (string), а любой элемент массива — индексной переменной (indexed). С элементами можно работать, как с обычными переменными: присваивать им значения, использовать при организации выражений. Например:
> A[-1]:=qwerty: A[1]:='йцукен': A[0]:=0: A[1]:=A[0]-A[2]:
Чтобы посмотреть содержимое массива, используем команду print:
> print(A);
При помощи команды table можно организовать данные в виде таблицы, отказавшись от целочисленной нумерации: table(FUN,LST). Здесь функция FUN определяет свойства таблицы, а список элементов LST формируется в виде пар равенств: Индекс-Значение. Для задания свойства можно использовать методы, перечисленные ранее. Например, создадим таблицу, устанавливающую соответствие между цифрами в английском и итальянском языках:
>
T:=table(sparse,[one=uno,two=due,three=tre]);
Комбинируя данные разных типов, можно получить, например, списки множеств или последовательности списков и т. д. К составным типам относятся indexable, sequential, tabular, rtable. Встроенными типами (built-in) являются And, Or, Not, nonnegint, posint, nonposint, negint, negative, positive, nonnegative, nonpositive. Большое число типов связано с необходимостью адекватно обрабатывать многообразие математических конструкций. Кроме того, в дополнение к имеющимся типам можно создавать свои, расширяя возможности Maple для решения возникающих задач. Для работы с данными и извлечения элементов полезны команды nops (число операндов) и ор (взятие операнда).
Опишем действие ряда команд, позволяющих эффективно обрабатывать данные (числа, выражения и другие), составляющие списки. Очень важной является команда map(FUN,LST). Эта команда применяет функцию FUN к каждому элементу объекта LST, в качестве которого может выступать список, множество или выражение. Вычисление косинуса для нескольких значений из списка демонстрирует следующий пример:
> map(cos,[0,Pi/2,Pi]);
Таблица 1. Стандартные функции.
|
Maple |
Математическая запись |
|
exp(x) |
ex |
|
ln(x) или log(x) |
ln x |
|
log10(x) |
lg x |
|
log[a](x) |
loga x |
|
sqrt(x) |
Öx |
|
abs(x) |
|x| |
|
signum(x) |
sgn x |
|
n! |
n! |
Таблица 2. Функции округления.
|
Имя |
Назначение |
|
round |
Округление к ближайшему целому |
|
trunc |
Округление отбрасыванием дробной части |
|
floor |
Округление к меньшему целому |
|
ceil |
Округление к большему целому |
Таблица 3. Математические функции.
|
Имена |
Назначение |
|
sin, cos, tan, cot, sec, csc |
Тригонометрические функции (аргументы в радианах) |
|
arcsin, arccos, arctan,
arccot, arcsec, arccsc |
Обратные тригонометрические функции |
|
sinh, cosh, tanh, coth, sech, csch |
Гиперболические функции |
|
arcsinh, arccosh,
arctanh, arccoth, arcsech,
arccsch |
Обратные гиперболические функции |
|
Dirac |
Дельта-функция Дирака |
|
Heaviside |
Функция Хевисайда |
|
BesselJ(p,x), BesselY(p,x),
BesselI(p,x),
BesselK(p,x), |
Бесселевы функции |
|
GAMMA(z), GAMMA(a,x), Beta(x,y) |
Гамма- и бета-функции |
|
Zeta(z) |
Дзета-функция Римана |
|
erf(x) |
Интеграл ошибок |
|
LegendreF, LegendreE, LegendrePi |
Эллиптические интегралы в форме Лежандра первого, второго и третьего рода |
|
LegendreFc, LegendreEc, LegendrePic |
Полные эллиптические интегралы в форме Лежандра первого, второго и третьего рода |
|
round, trunc |
Округление к усечённому целому |
Построение графиков функций в Maple
Для построения графиков в декартовых координатах служит функция plot
> plot(cos(x),x=-3*Pi..3*Pi);
![[Maple Plot]](image001-7.gif)
Если функция принимает бесконечное значение в какой-либо точке, то следует указать дополнительный параметр discont=true. Кроме того, может потребоваться ограничить диапазон отображения графика по оси y.
> plot(tan(x),x=-Pi..Pi,y=-5..5,discont
= true);
![[Maple Plot]](image002-17.gif)
Изменить параметры графика можно из контекстного меню, которое появляется, если нажать правую кнопку мыши в поле графика; из основного меню, пункты которого меняются, если график выделен; задавая необязательные параметры функции plot.
> plot(sin(x),x=-2*Pi..2*Pi,color=gold,title=`График
sin(x)`,axes=boxed,titlefont=[TIMES,ITALIC,10]);
![[Maple Plot]](image003-9.gif)
На рисунке вверху изменен цвет (color=gold), тип координатных осей (axes=boxed) и добавлен заголовок курсивом стиля Times размера 10 пунктов (titlefont=[TIMES,ITALIC,10]).
Параметрически заданную функцию можно изобразить также с помощью plot
> plot([sin(2*t),cos(3*t),t=0..4*Pi]);
![[Maple Plot]](image004-15.gif)
Для того, чтобы получить график в полярных координатах, следует указать coords=polar
[>
restart:r:=f^2/10:plot([r,f,f=0..5*Pi],coords=polar);

> plot3d(x^2+y^2,x=-1..1,y=-1..1);
![[Maple Plot]](image006-14.gif)
> plot3d([
(1+0.3*cos(phi))*cos(theta),
(1+0.3*cos(phi))*sin(theta),
0.3*sin(phi)],
phi=0..2*Pi,
theta=0..2*Pi,
title=`Тор`,
titlefont=[TIMES,ITALIC,12],
scaling=CONSTRAINED);
![[Maple Plot]](image007-8.gif)
> plot3d({x^2+y^2,x^2-y^2},x=-1..1,y=-1..1,orientation=[70,70]);
![[Maple Plot]](image008-10.gif)
Задания:
1. Построить графики функций {x=sin
t, y=ln t, t=0..5}; {ρ=φ2/10, φ=0..5π}; y=2sinx
2. Построить
графики
|
Параметрические координаты |
|||||||||||||||
|
№ |
Функция |
интервал |
№ |
Функция |
Интервал |
||||||||||
|
t1 |
t2 |
t1 |
t2 |
||||||||||||
|
1 |
|
0 |
2p |
8 |
|
0 |
p /2 |
||||||||
|
2 |
|
-p |
p |
9 |
|
-1.5 |
0.5 |
||||||||
|
3 |
|
-3 |
3 |
10 |
|
-p /2 |
p /2 |
||||||||
|
4 |
|
-p |
2p |
11 |
|
p /8 |
p /3 |
||||||||
|
5 |
|
-2 |
3 |
12 |
|
-p |
p |
||||||||
|
6 |
|
-10 |
20 |
13 |
|
0 |
2p |
||||||||
|
7 |
|
-0.1 |
2 |
14 |
|
-p |
p |
||||||||
|
Полярные координаты |
|||||||||||||||
|
№ |
Функция |
интервал |
№ |
Функция |
Интервал |
||||||||||
|
j 1 |
j 2 |
j 1 |
j 2 |
||||||||||||
|
1 |
|
0 |
p |
8 |
|
-p /4 |
p /4 |
||||||||
|
2 |
|
-p |
p |
9 |
|
-2 |
2 |
||||||||
|
3 |
|
0 |
p /2 |
10 |
|
-p |
p |
||||||||
|
4 |
|
-p |
p |
11 |
|
0 |
p /6 |
||||||||
|
5 |
|
-p |
p |
12 |
|
-p |
p |
||||||||
|
6 |
|
-p |
p |
13 |
|
-p |
p |
||||||||
|
7 |
|
-p /2 |
p /2 |
14 |
|
-p |
p |
||||||||
3. Вычислить значение функции и построить график в точках x=1 и x=-1.46
![]()